package com.example.mybatis_plus_use.config;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

//代码生成器
public class CodeGenerator {
    public static void main(String[] args) {
        // 全局配置
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/users?serverTimezone=Asia/Shanghai",
                        "root",
                        "123456")
                // 全局配置
                .globalConfig(builder -> {
                    builder.author("zjh") // 设置作者
                            .outputDir(System.getProperty("user.dir") + "/src/main/java") // 指定输出目录
                            .commentDate("yyyy-MM-dd")
                            .dateType(DateType.TIME_PACK); // 时间策略
                })
                // 包配置
                .packageConfig(builder -> {
                    builder.parent("com.example.mybatis_plus_use") // 设置父包名
                            .moduleName(""); // 设置模块名
                })
                // 策略配置
                .strategyConfig(builder -> {
                    builder.addInclude("article") // 设置需要生成的表名 只写新表名,不会覆盖原来的文件
                            // Entity 策略配置
                            .entityBuilder()
                            .enableLombok() // 开启 Lombok
                            .enableTableFieldAnnotation() // 开启字段注解
                            .logicDeleteColumnName("deleted") // 逻辑删除字段
                            .enableActiveRecord() // 开启 ActiveRecord 模式
                            // Controller 策略配置
                            .controllerBuilder()
                            .enableRestStyle() // 开启生成 @RestController
                            // Service 策略配置
                            .serviceBuilder()
                            .formatServiceFileName("%sService")
                            .formatServiceImplFileName("%sServiceImpl")
                            // Mapper 策略配置
                            .mapperBuilder()
                            .enableMapperAnnotation() // 开启 @Mapper
                            .formatMapperFileName("%sMapper")
                            .formatXmlFileName("%sMapper");
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用 Freemarker 引擎模板
                .execute();
    }
}